package ckw.network;

import java.sql.Time;
import java.util.ArrayList;
import java.util.LinkedList;

import ckw.database.DatabaseManager;
import ckw.database.OKW;
import ckw.gui.MainWindowC;

import core.messages.Ack;
import core.messages.Dane;

public class Queue2 {
	LinkedList<QueueItem> lista = new LinkedList<QueueItem>();

	public synchronized void put(QueueItem e) {
		lista.add(e);
		System.out.println("Dodano wiadomosc do kolejki przechowujacej");
		notify();
	}

	// szuka niewyslanych
	public synchronized ArrayList<QueueItem> findToSend() {
		if ((lista.size() == 0))
			return null;
		ArrayList<QueueItem> wynik = new ArrayList<QueueItem>();
		Time time = new Time(System.currentTimeMillis());
		for (QueueItem e : lista) {
			// sprawdza czas i ustawia nowy czas
			if (e.getTime().getTime() + 5000 < time.getTime()) {
				System.out.println("Ponownie do wyslania "
						+ e.getTime().getTime() + " " + time.getTime());
				e.setTime(time);
				wynik.add(e);
			}
		}
		return wynik;
	}

	// szuka elementu do usuniecia, gdy otrzymano potwierdzenie
	public synchronized boolean findToRemove(Ack msg) {
		if ((lista.size() == 0))
			return false;
		for (QueueItem e : lista) {
			if (msg.getReceived() == e.getMsg().getNumber()) {
				if (msg.getInfoNr() == 2) {
					Dane i = (Dane) e.getMsg();
					DatabaseManager db = DatabaseManager.getInstance();
					OKW okw = db.getOKW(e.getKomisja().getId());
					db.setIsSend(i.getElectionData().getElection().getName(),
							okw, true);
					MainWindowC.aktualizujWybory();
				}
				lista.remove(e);
				System.out
						.println("Usunieto wiadomosc z kolejki przechowujacej");
				return true;
			}
		}
		return false;

	}

}